exposure bias
问题背景 #card
- 针对的问题是只有被曝光的样本才能进入训练集,导致 training 阶段能获取到的样本只是 serving 时很小的一部分
解决方法
- Augmentation、IPS 和 Domain Adaption
在召回上被简化成[[负样本]]选择问题 [[双塔模型样本选择]] [[SENET]]
-
曝光未点击数据 #card
- 这就是上面说的导致 Sample Selection Bias 问题的原因。我们的经验是,这个数据还是需要的,只是要和其它类型的负例选择方法,按照一定比例进行混合,来缓解 Sample Selection Bias 问题。当然,有些结论貌似是不用这个数据,所以用还是不用,可能跟应用场景有关。
-
全局随机选择负样本#card
- 就是说在原始的全局物料库里,随机抽取做为召回或者粗排的负例。这也是一种做法,Youtube DNN 双塔模型就是这么做的。从道理上讲,这个肯定是完全符合输入数据的分布一致性的,但是,一般这么选择的负例,因为和正例差异太大,导致模型太好区分正例和负例,所以模型能学到多少知识是成问题的。
-
Batch 内随机选择负样本 #card
- 就是说只包含正例,训练的时候,在 Batch 内,选择除了正例之外的其它 Item,做为负例。这个本质上是:给定用户,在所有其它用户的正例里进行随机选择,构造负例。它在一定程度上,也可以解决 Sample Selection Bias 问题。比如 Google 的双塔召回模型,就是用的这种负例方法。
-
选择 4: 曝光数据随机选择负例 #card
- 就是说,在给所有用户曝光的数据里,随机选择做为负例。这个我们测试过,在某些场景下是有效的。
-
选择 5: 基于 Popularity 随机选择负例 #card
- 这种方法的做法是:全局随机选择,但是越是流行的 Item,越大概率会被选择作为负例。目前不少研究证明了,负例采取 Popularity-based 方法,对于效果有明显的正面影响。它隐含的假设是:如果一个例子越流行,那么它没有被用户点过看过,说明更大概率,对当前的用户来说,它是一个真实的负例。同时,这种方法还会打压流行 Item,增加模型个性化程度。
-
选择 6: 基于 Hard 选择负例#card
- 它是选择那些比较难的例子,做为负例。因为难区分的例子,很明显给模型带来的 loss 和信息含量比价多,所以从道理上讲是很合理的。但是怎样算是难的例子,可能有不同的做法,有些还跟应用有关。比如 Airbnb,还有不少工作,都是在想办法筛选 Hard 负例上。
#card 我们在模型召回阶段的经验是:比如在 19 年年中左右,我们尝试过选择 1 + 选择 3 的混合方法,就是一定比例的 “曝光未点击” 和一定比例的类似 Batch 内随机的方法构造负例,当时在 FM 召回取得了明显的效果提升。但是在后面做双塔模型的时候,貌似这种方法又未能做出明显效果。
- 全局随机,则无论是 FM 召回还是后来的双塔,都没做出效果,有时甚至负向明显。但是你又能看到一些报道采用的是全局随机做为负例。所以,我目前的感觉,负例这块是个宝藏,值得深入探索下,包括不同方法的混合,但是到底哪种方法是有效的,貌似很难有统一的定论,带有一定艺术性。